/**
 * 結果一覧（跳躍競技－高さの跳躍）画面 コントローラ
 */
APP.controller('ResultLeapACtrl', function($http, $window, $timeout, $anchorScroll) {
  
  // thisを保持（Ajax内のthisと混同を防ぐ為）
  var pthis = this;
  // HTMLファイル名取得
  var fileName = window.location.href.split('/').pop().split(".html").shift();

  
  /**
   * 初期処理
   */
  pthis.Initialize = function () {

    // 表示用データをクリア
    pthis.datTaikai = [];
    pthis.datResultLeapA = [];
    pthis.datShowData = [];
    pthis.datRekidaiKirokuAll = undefined;
    pthis.datRekidaiKiroku = undefined;
    pthis.prmRekidai = "";
    // 並び替えを追加（初期値は順位）
    pthis.prmSort = "1";
    // 混成集計一覧
    pthis.datKonseiShukei = [];
    pthis.datKonseiShukeiInfo = undefined;

    // 画面項目を設定
    pthis.prmAryResult = {};
    pthis.prmResult = "";

    
    // Promiseを使用しJSONを並列取得し、表示処理を実施する
    Promise.all([new Promise(function (resolve, reject) {

      //=== 大会情報JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../Taikai.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 大会情報データ
        pthis.datTaikai = response.data;
        resolve();
      }, function errorCallback(response) {
        reject();
      });

    }), new Promise(function (resolve, reject) {

      //=== 結果一覧（跳躍競技－高さの跳躍）画面 一覧JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : './'+fileName+'.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全結果一覧（跳躍競技－高さの跳躍）データ
        pthis.datResultLeapA = response.data;
        // リザルトコンボボックスの設定
        pthis.prmAryResult = pthis.datResultLeapA.ComboList;
        if ( pthis.prmAryResult.length > 0 ) {
          pthis.prmResult = pthis.prmAryResult[0].ComboKey;
        }
        resolve();
      }, function errorCallback(response) {
        reject();
      });
      
    }), new Promise(function (resolve, reject) {

      //=== 混成集計（一覧）画面 一覧JSONの取得を行う
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../konseishukei/KonseiShukei.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全混成集計（一覧）データ
        pthis.datKonseiShukei = response.data;
        resolve();
      }, function errorCallback(response) {
        reject();
      });
      
    })]).then(function () {

      //=== 歴代記録ダイアログ用JSONを取得
      $http({
        method  : AJAX_METHOD_GET,
        url     : '../../rekidai/RekidaiKiroku.json' + '?a=' + START_TIMESTAMP,
      }).then(function successCallback(response) {
        // 全歴代記録データ
        pthis.datRekidaiKirokuAll = response.data.RekidaiKirokuList;
        // キーを決定する
        var RekidaiKirokuKey = "";
        if (!!pthis.datResultLeapA.RekidaiKyogiList) {
          // 合体競技の場合、
          RekidaiKirokuKey = pthis.datResultLeapA.RekidaiKyogiList[0].KyogiNo + "-" + pthis.datResultLeapA.SubNo;
          pthis.prmRekidai = pthis.datResultLeapA.RekidaiKyogiList[0].KyogiNo;
        } else {
          // 通常の場合、
          RekidaiKirokuKey = pthis.datResultLeapA.KyogiNo + "-" + pthis.datResultLeapA.SubNo;
        }
        // 歴代記録データ
        pthis.datRekidaiKiroku = pthis.datRekidaiKirokuAll[RekidaiKirokuKey];
      }, function errorCallback(response) {
        // JSON取得エラー
      });

      //=== 混成集計結果があるか
      for (var i in pthis.datKonseiShukei.KonseiShukeiList) {
        var konseiShukei = pthis.datKonseiShukei.KonseiShukeiList[i];
        // 同じ競技NOデータを探す
        var konseiDetails = konseiShukei.Details + "-";
        if (konseiDetails == pthis.datResultLeapA.DetailKey) {
          pthis.datKonseiShukeiInfo = konseiShukei;
          break;
        }
      }
 
      // 表示処理
      $timeout(function() {
        pthis.Show("init");
      }, 0);

    }).catch(function () {
      // JSON取得エラー
    });

  };

  /**
   * 表示処理
   */
  pthis.Show = function (flg) {

    // ソート順設定
    if (!!flg && flg != "init") {
      for (var i in pthis.datResultLeapA["ComboList"]) {
        var combokey = pthis.datResultLeapA["ComboList"][i]["ComboKey"];
        for (var j in pthis.datResultLeapA["ResultInfo"+combokey]) {
          pthis.datResultLeapA["ResultInfo"+combokey][j].Sort = pthis.prmSort;
        }
      }
    }

    // 表示用データをクリア
    pthis.datShowData = [];

    // 画面で選択されている条件に従い表示データを設定する
    // 対象リザルトのデータを取得
    var tmpDatResult = pthis.datResultLeapA["ResultInfo"+pthis.prmResult];

    // 対象リザルトのデータを表示用データに設定
    pthis.datShowData = tmpDatResult;

  };


  /**
   * 歴代記録ボタンクリックイベント
   */
  pthis.ShowRekidai = function () {

    // 歴代記録ダイアログを表示する
    if (!!pthis.datRekidaiKiroku) {
      RekidaiDialogShow();
    }

  }

  /**
   * 歴代記録ダイアログ競技チェンジイベント
   */
  pthis.ChangeRekidai = function () {

    // キーを生成
    var RekidaiKirokuKey = pthis.prmRekidai + "-" + pthis.datResultLeapA.SubNo;
    // 歴代記録データ
    pthis.datRekidaiKiroku = pthis.datRekidaiKirokuAll[RekidaiKirokuKey];

  }

  /**
   * 混成リンククリックイベント
   */
  pthis.ClickLinkKonsei = function (link) {
    // 詳細ページ遷移
    if (!!link) {
      // 混成集計のパスに合わせる
      window.location.href = "../../konseishukei/" + link;
    }
  }


  // 初期処理を実行
  pthis.Initialize();

});
